// 此文件专用于权限拦截

// 导入路由对象
import router from '@/router/index.js'

// 导入store
import store from '@/store/index.js'

// 导入进度条插件
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

// 定义白名单
const WHITE_LIST = ['/login', '/404']

// 添加导航守卫
// 全局前置守卫
router.beforeEach(async(to, from, next) => {
  // to 要跳转到的路由
  // from 从哪个路由跳转
  // next 放行函数

  // 开启进度条
  NProgress.start()

  // 得到token
  const token = store.getters.token
  // 1 判断是否存在token
  if (!token) {
    // 2. token不存在时
    // 2.1 判断当前访问的页面是否在白名单中
    if (WHITE_LIST.includes(to.path)) {
      // includes() 用于判断数组中是否包含某个元素

      // 在白名单中，向后执行
      next()
    } else {
      // 不在白名单中，跳转回登录页面
      router.push('/login?_redirect=' + to.path)
    }
  } else {
    // 3. token存在时
    // 判断当前要访问的页面是否是login页
    if (to.path === '/login') {
      // 是，跳转到首页
      router.push('/')
      // 手动关闭进度条
      NProgress.done()
    } else {
      // 不是，向后执行

      // 得到用户信息
      const userInfo = store.getters.userInfo
      // 判断是否存在用户信息
      if (!userInfo.username) {
        // 不存在时,得到用户信息
        await store.dispatch('user/getUserInfo')
      }
      // 存在时，向后执行代码
      next()
    }
  }
})

// 全局后置钩子 进入到对应的路径文件中会执行
router.afterEach((to, from) => {
  // to 要跳转到的路由
  // from 从哪个路由跳转

  // 关闭进度条
  NProgress.done()
})
